Salesforce is a cloud computing company that offers various customer relationship management (CRM) products and social enterprise (e.g., social networking) solutions. Companies offering CRM services, such as Salesforce, can provide entities with an interface for case management and task management, as well as a system for automatically routing and escalating important events. The Salesforce platform also enables individual customers to track their own cases. In some instances, the Salesforce platform includes a social networking add-on application (also referred to as a “plug-in”) that allows the Salesforce platform to read conversations on social networking websites, analyze emails, chat messages, search engine queries, etc.
Force.com®, meanwhile, is a platform as a service (PaaS) that allows developers to create add-on applications that can be integrated into the Salesforce platform. Force.com® applications are hosted on the architecture of the Salesforce platform and are typically built using Apex, which is a proprietary Java-like programming language.
When developing an add-on application for the Salesforce platform, it is often desirable to link to external services and external sources of data. For example, a developer may wish to integrate data that is stored in an enterprise resource planning (ERP) system. Data integration is particularly important when the customer for whom the add-on application is being developed still uses data sources that are external to the Salesforce platform (e.g., on-premises storage or a cloud-based storage service).
Traditionally, data has been exported to and imported from these external sources. However, there is often significant lag between when a user modifies the data via a Salesforce interface and when the modification is reflected in the external source. Moreover, users are typically required to manually invoke data synchronization. These issues can cause significant problems, particular in fast-paced or multi-tenant environments where it is desirable to have the data be synchronized as close to real time as possible.